作者:Ray依依 | 来源:互联网 | 2023-08-29 13:44
代码屏幕截图
首先,这是我在这里的第一篇文章,并且我对编程还很陌生,因此如果我问愚蠢的问题,对于应用程序学,我会丢失一些信息。请让我知道。
尝试更改SQL数据库中的字段时,出现上述故障消息。我检查了一些其他类似问题的帖子,但是它们都有不同的原因,在我看来,我的问题还有另一个。
随附的屏幕截图显示了一种有效的方法,一种引起问题的方法。对于我的生活,我无法否认问题是什么。
完整的失败消息是:
Fehlermeldung: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'taskID =79' at line 1
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'taskID =79' at line 1
at java.base/jdk.internal.reflect.NativeConstructoraccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructoraccessorImpl.newInstance(NativeConstructoraccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructoraccessorImpl.newInstance(DelegatingConstructoraccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.Util.getInstance(Util.java:408)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3933)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3869)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2524)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2675)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2465)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1912)
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1251)
at databaseConnection.TaskDAOimplDB.updatetask(TaskDAOimplDB.java:110)
at procedure.Procedure.main(Procedure.java:36)
]
这不是应该使用PreparedStatement
的方式。关键是替换SQL中的?
字符-这也可以处理String内部的空格,否则可能导致SQL itslef无效。我还建议使用PreparedStatement::executeUpdate
。这更适合这种查询。
在此PreparedStatement对象中执行SQL语句,该对象必须是SQL数据操作语言(DML)语句,例如INSERT
,UPDATE
或DELETE
;或不返回任何内容的SQL语句,例如DDL语句。
String sql = "UPDATE Tasks SET dueDate=? WHERE taskID=?";
try (Connection cOnn= DriverManager.getConnection(...);
PreparedStatement stm = conn.createStatement(sql);)
{
// Don't forget the `parameterIndex` starts with `1` unlike arrays or lists
stm.setString(1,dueDate);
stm.setInt(2,taskID);
stm.executeUpdate();
System.out.println("Updated");
} catch (SQLException e) {
...
}